package cn.net.isir.utils;

import org.apache.log4j.Logger;

import java.math.BigDecimal;

/**
 * @author liuxubo
 * @filename DoubleUtils.java
 * @package cn.net.isir.common
 * @email lxb@isir.net.cn
 * @date 2018/09/25
 * @comment
 * @since 1.7
 */
public class DoubleUtils {
    // 声明log4j日志
    private static Logger logger = Logger.getLogger(DoubleUtils.class);

    /**
     * 加法
     *
     * @param d1 加数
     * @param d2 被加数
     * @return 和
     */
    public static Double add(Double d1, Double d2) {
        BigDecimal bigDecimal = new BigDecimal(String.valueOf(d1));
        bigDecimal = bigDecimal.add(new BigDecimal(String.valueOf(d2)));
        return Double.parseDouble(String.valueOf(bigDecimal));
    }

    /**
     * 减法
     *
     * @param d1 减数
     * @param d2 被减数
     * @return 差
     */
    public static Double sub(Double d1, Double d2) {
        BigDecimal bigDecimal = new BigDecimal(String.valueOf(d1));
        bigDecimal = bigDecimal.subtract(new BigDecimal(String.valueOf(d2)));
        return Double.parseDouble(String.valueOf(bigDecimal));
    }

    /**
     * 乘法
     *
     * @param d1 乘数
     * @param d2 被乘数
     * @return 积
     */
    public static Double mul(Double d1, Double d2) {
        BigDecimal bigDecimal = new BigDecimal(String.valueOf(d1));
        bigDecimal = bigDecimal.multiply(new BigDecimal(String.valueOf(d2)));
        return Double.parseDouble(String.valueOf(bigDecimal));
    }

    /**
     * 除法(除不尽时，四舍五入)
     *
     * @param d1    除数
     * @param d2    被除数
     * @param scale 小数后的位数
     * @return 商
     */
    public static Double div(Double d1, Double d2, int scale) {
        BigDecimal bigDecimal = new BigDecimal(String.valueOf(d1));
        bigDecimal = bigDecimal.divide(new BigDecimal(String.valueOf(d2)), scale, BigDecimal.ROUND_HALF_UP);
        return Double.parseDouble(String.valueOf(bigDecimal));
    }


    public static void main(String[] args) {
        logger.info(999999999.2 + 0.03);
        logger.info(add(999999999.2, 0.03));
        logger.info(div(9999.2, 0.03, 1));
        logger.info(div(9999.2, 0.03, 2));
        logger.info(div(9999.2, 0.03, 3));
    }


}
